package com.wgh.order.service;

import com.wgh.order.entity.Order;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wgh.common.vo.PageResult;

import java.util.List;
import java.util.Map;

/**
 * 订单服务接口
 */
public interface OrderService extends IService<Order> {
    
    /**
     * 创建订单
     * @param order 订单信息
     * @return 创建的订单
     */
    Order createOrder(Order order);
    
    /**
     * 根据订单ID查询订单详情
     * @param orderId 订单ID
     * @return 订单详情
     */
    Order getOrderDetail(Long orderId);
    
    /**
     * 根据订单编号查询订单
     * @param orderSn 订单编号
     * @return 订单信息
     */
    Order getOrderBySn(String orderSn);
    
    /**
     * 根据用户ID查询订单列表
     * @param userId 用户ID
     * @param orderStatus 订单状态
     * @return 订单列表
     */
    List<Order> getOrdersByUserId(Long userId, Integer orderStatus);
    
    /**
     * 分页查询订单列表
     * @param params 查询参数
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页结果
     */
    PageResult<Order> pageOrders(Map<String, Object> params, Integer pageNum, Integer pageSize);
    
    /**
     * 取消订单
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 取消结果
     */
    boolean cancelOrder(Long orderId, Long userId);
    
    /**
     * 支付订单
     * @param orderId 订单ID
     * @param payType 支付方式
     * @param transactionId 交易流水号
     * @return 支付结果
     */
    boolean payOrder(Long orderId, Integer payType, String transactionId);
    
    /**
     * 确认收货
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 确认结果
     */
    boolean confirmReceipt(Long orderId, Long userId);
    
    /**
     * 删除订单
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 删除结果
     */
    boolean deleteOrder(Long orderId, Long userId);
    
    /**
     * 更新订单状态
     * @param orderId 订单ID
     * @param orderStatus 订单状态
     * @return 更新结果
     */
    boolean updateOrderStatus(Long orderId, Integer orderStatus);
}